package com.celesea.auth.core.service;

import com.celesea.auth.core.entity.BaseEntity;
import com.celesea.auth.core.util.Filter;
import com.celesea.auth.core.util.Page;
import com.celesea.auth.core.util.PageData;
import com.celesea.auth.core.util.Sort;

import java.util.List;

/**
 * 
 * @author Administrator
 * 
 * @param <T>
 */
public interface BaseService<T extends BaseEntity> {

	/**
	 * 通过主键查询对象
	 * 
	 * @param id
	 * @return
	 */
	T selectById(String id);

	/**
	 * 返回新建的对象
	 * 
	 * @return
	 */
	T selectForNew();

	/**
	 * 查询视图数据
	 * 
	 * @param id
	 * @return
	 */
	T selectForView(String id);

	/**
	 * 保存
	 * 
	 * @param entity
	 * @return
	 */
	T doSave(T entity);

	/**
	 * 插入
	 * 
	 * @param entity
	 * @return
	 */

	T insert(T entity);

	/**
	 * update
	 */
	T update(T entity);

	/**
	 * 通过主键删除对象
	 * 
	 * @param id
	 */
	void doDelete(String id);

	/**
	 * 通过主键删除对象的关联数据
	 * 
	 * @param id
	 */
	void doDeleteMapping(String id);

	/**
	 * 批量删除
	 * 
	 * @param ids
	 */
	void doDelete(List<String> ids);

	/**
	 * 检查是否唯一
	 * 
	 * @param entity
	 * @return 如果唯一返回true，否则返回false
	 */
	boolean checkUnique(T entity);

	/**
	 * 返回唯一的对象
	 * 
	 * @param entity
	 * @return
	 */
	T selectUnique(T entity);

	/**
	 * 查询分页数据
	 * 
	 * @return
	 */
	PageData<T> selectPage(Filter filter, Page Page, Sort sort);

	/**
	 * 查询列表数据,调用 selectPage 语句 但是不分页
	 * 
	 * @return
	 */
	List<T> selectList(Filter filter, Sort sort);

	List<T> selectList(Filter filter);

	/**
	 * 查询所有的数据
	 * 
	 * @return
	 */
	List<T> selectAll();

	/**
	 * 生成Id
	 * 
	 * @return
	 */
	String generatPk(T entity);


}
